package com.fypg.module.blooddonation.api.client.service.bloodDonationAPI;

import com.fypg.module.blooddonation.api.client.dal.bloodPlatform.*;
import com.fypg.module.blooddonation.api.client.dal.bloodStation.*;

import java.util.List;

public interface BloodDonationAPIService {
    /**
     * 献血核查接口
     * 主要用于核查联网范围内的献血者的献血时间间隔及淘汰信息
     *
     * @param request 献血核查请求参数
     * @return 献血核查结果
     * @ 当接口调用失败时抛出异常
     */
    DonorChkData donorCheck(DonorChkReq request) ;

    /**
     * 献血记录查询接口
     * 主要用于查询联网范围内的献血者的历次献血信息
     *
     * @param request 献血记录查询请求参数
     * @return 献血记录查询结果
     * @ 当接口调用失败时抛出异常
     */
    DonchkTestResultsResp donchkTestResults(DonRecordQueryReq request) ;

    /**
     * 获取证件类型字典（用于前端下拉框等）
     *
     * @param orgUuid 机构UUID
     * @return 字典响应
     * @ 当接口调用失败时抛出异常
     */
    DictDownloadResp getIdentityTypeDict(String orgUuid) ;

    /**
     * 获取检测总结论字典
     *
     * @param orgUuid 机构UUID
     * @return 字典响应
     * @ 当接口调用失败时抛出异常
     */
    DictDownloadResp getTestResultDict(String orgUuid) ;

    /**
     * 通用字典下载（开放给其他模块）
     *
     * @param dictionaryKey 字典键
     * @param orgUuid 机构UUID
     * @return 字典响应
     * @ 当接口调用失败时抛出异常
     */
    DictDownloadResp downloadDictionary(String dictionaryKey, String orgUuid) ;

    String getToken(String  bloodStationEncode) ;

    /**
     * 创建或更新献血预约
     * @return 预约ID
     */
    String bloodApp(BloodAppReq request) ;

    /**
     * 获取献血地点排班信息
     */
    List<CollectPlaceData> getCollectPlace(String  bloodStationEncode) ;

    /**
     * 获取预约结果详情
     */
    AppointmentResultData getBloodApp(GetBloodAppReq request) ;

    /**
     * 获取时间段可预约人数
     */
    List<TimeAppCountData> getTimeAppCount(TimeAppCountReq request) ;

    /**
     * 获取字典数据
     */
    List<DictionaryItem> getDic( DictionaryReq request) ;


    void removeDictionaryCache(String bloodStationEncode);
}
